Mastering Ethereum 5章 Wallet
Ethereumの多くのクライアントはkeystoreファイルがあり、JSONファイル形式で秘密鍵を持っている。
code:javascript
{
"address": "001d3f1ef827552ae1114027bd3ecf1f086ba0f9",
"crypto": {
"cipher": "aes-128-ctr",
"ciphertext":
"233a9f4d236ed0c13394b504b6da5df02587c8bf1ad8946f6f2b58f055507ece",
"cipherparams": {
"iv": "d10c6ec5bae81b6cb9144de81037fa15"
},
"kdf": "scrypt",
"kdfparams": {
"dklen": 32,
"n": 262144,
"p": 1,
"r": 8,
"salt":
"99d37a47c7c9429c66976f643f386a61b78b97f3246adca89abe4245d2788407"
},
"mac": "594c8df1c8ee0ded8255a50caf07e8c12061fd859f4b7c76ab704b17c957e842"
},
"id": "4fcb2ba4-ccdb-424f-89d5-26cce304bf9c",
"version": 3
}
SeededWallet
"seeded" walletsはSeedのランダムに選ばれた単語からプライベートキーが生成されたウォレット。
Seedを知っていればあとでキーは復元できる。
https://gyazo.com/5f11af07e9d367624a8c6dd86d1370a6
現在ほぼすべてのウォレットは、BIP-32でスタンダード化されたhierarchical deterministic (HD)ウォレット。この規格の中では、Seedキーからキーが階層構造を持つ。
利点としては、異なる鍵を異なる用途に使うことができる。しかしウォレットは1つ。
もう1つの利点はプラベートキーにアクセスすることなく、パブリックキーを作成することができるから比較的安全。
Seeds and Mnemonic Codes (BIP-39)
Mnemonic codeによってSeedを作成することができる。
"brainwallet" とMnemonicは違う。後者は完全なランダム。前者は人間が選ぶ。
BIP-39はTrezorハードウェアウォレット開発者からに提案。
MnemonicとSeedを作成するためには9つのステップがある。これは1〜6と7〜9に分けることができ、前者がMnemonicの作成。後者がSeedの作成である。
プロセス
128〜256bitsの暗号学的にランダムなシークエンスSを作成する
SをSHA256でハッシュ化した値を32bitsで割りSのChecksumを作成する
Sの末尾に作成したChecksumを追加する
SとChecksumを11bitsずつに分割する
11bitsの塊の数だけランダムな2048ワードの辞書からワードをピックする
ワードを作成しワードの順番を保存する
https://gyazo.com/a61b6952269022d62e5aca28301aa549
https://gyazo.com/248d6511ab141b84193989b418447581
作成されたMnemonicとSalt(Mnemonicとパスフレーズ)を2つのパラメーターとしHMAC-SHA512 ハッシュ関数に通す
アウトプットとして512bitのSeedを作成する
BIP-39はライブラリーとして提供されている。
Python-mnemonic
CnsenSys/eth-lightwallet
npm/bip39
Source: https://github.com/ethereumbook/ethereumbook/blob/develop/05wallets.asciidoc